home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Transactor
/
Transactor_18_1987_Transactor_Publishing.d64
/
fast sqr.pal
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2023-02-26
|
2KB
|
93 lines
100 rem faster square root pal source
110 open8,8,1,"0:fast sqr.obj
120 [158] 700
130 .opt o8
140 [172][178] $c000
150 ; faster square root
160 ; takes first basic variable [175]
170 ; [142]s square root in its place
180 ; uses [162][164]n's method with a [203]od
190 ; first approximati[145].
200 ;
210 var [178] $2d ; start of variables
220 ptr [178] $aa ; po[181]s [164] variable
230 ctr [178] $ac ; iterati[145] counter
240 temp [178] $5c ; temp s[164]re [129] flt pt #
250 ;
260 ; rom routines
270 temf1 [178] $bba2 ; unpack 5c [164] fac#1
280 divid [178] $bb0f ; fac#1[178]var[173]fac#1
290 plus [178] $b867 ;fac#1[178]fac#2[170]fac#1
300 f1tem [178] $bbc7 ; pack fac#1 [164] 5c
310 f1mem [178] $bbd4 ; pack fac#1 [164] mem[176]y
320 [153] [178] $ffd2 ; chrout routine
330 ;
340 ldy #$03 ;[161] variable's mantissa
350 lda (var),y ;check [139] negative
360 bmi err[176]exit
370 dey
380 lda (var),y ;[161] variable's [189][145]ent
390 beq [142] ;[142] [139] var[178]zero
400 lda var ;po[181]s [164] var name
410 clc
420 adc #$02 ;add 2 so ptr
430 sta ptr ;po[181]s [164] variable
440 lda var[170]1 ;[175] s[164]re it
450 adc #$00
460 sta ptr[170]1
470 ldy #$0 ;fill temp with zeroes
480 sty temp[170]1
490 sty temp[170]2
500 sty temp[170]3
510 sty temp[170]4
520 ;
530 ; now find a first approximati[145]
540 ; [164] the square root
550 ; [189][145]ent[178] [189][145]ent[173]2 [170]40.5
560 ; mantissa found from table
570 lda (ptr),y ;[161] [189][145]ent (y[178]0)
580 r[176] ;a[178]a[173]a, pop low bit
590 ; carry[178]1 when [189][145]ent odd
600 bcs add ;no flag set [139] odd
610 ldx #$80 ;even, so set a flag bit
620 stx temp[170]1
630 add adc #$40 ;a[178][189][145]ent of 1st appr
640 sta temp ;s[164]re [189][145]ent
650 iny ;y[178]1
660 lda (ptr),y ;mantissa of variable
670 [176]a temp[170]1 ;[139] [189][145] odd add 80
680 lsr ;sh[139]t nybble right
690 lsr
700 lsr
710 lsr
720 tax
730 lda tabl,x ;[161] approx from table
740 sta temp[170]1 ;s[164]re it in temp mantissa
750 ; now use [162][164]n's method
760 ; x[178](x[170]var[173]x)[173]2
770 lda #$04
780 sta ctr ;set counter [164] 4
790 lda #[179]temp
800 ldy #0
810 jsr temf1 ;[147] fac#1 from temp
820 loop lda ptr
830 ldy ptr[170]1
840 jsr divid ;divide fac#1 [181]o var
850 lda #[179]temp
860 ldy #0
870 jsr plus ;add temp [164] fac#1
880 dec $61 ;divide fac#1 by 2
890 jsr f1tem ;pack fac#1 [164] temp
900 dec ctr ;dec[143]ent the counter
910 bne loop ;loop [139] [168] zero
920 ldx ptr
930 ldy ptr[170]1
940 jsr f1mem ;pack fac#1 [164] mem[176]y
950 [142] rts
960 err[176]exit lda #$3f ; "?"
970 jsr [153] ;[153] "?"
980 rts
990 tabl .byte 03,11,18,25,32,38,44,50
1000 .byte 58,69,79,89,98,107,115,123
1010 .[128]